关于(int)(pt[i].x *cos(TWOPI *iAngle / 360) + pt[i].y *sin(TWOPI *iAngle/360))这句什么意思!

来源:百度知道 编辑:UC知道 时间:2024/05/30 10:24:48
ptTemp.x = (int)(pt[i].x *cos(TWOPI *iAngle/360) + pt[i].y *sin(TWOPI *iAngle/360));
ptTemp.y = (int)(pt[i].y *cos(TWOPI *iAngle /360 ) - pt[i].x *sin(TWOPI *iAngle/360));
这两句的意思,怎么得来的!越详细越好,说的牛B的追加30分!
void RotatePoint(POINT pt[],int iNum,int iAngle)
{
int i;
POINT ptTemp;
for(i =0 ;i<iNum;i++)
{
ptTemp.x = (int)(pt[i].x *cos(TWOPI *iAngle/360) + pt[i].y *sin(TWOPI *iAngle/360));
ptTemp.y = (int)(pt[i].y *cos(TWOPI *iAngle /360 ) - pt[i].x *sin(TWOPI *iAngle/360));
pt[i] =ptTemp;
}

/*-------------------
公式 x' = x' cos(a) + y' sin(a)
y' = y' cos(a) + x' sin(a)

-------------------*/
}

在程序开始的地方
#define TWOPI (2*3.14159)

ptTemp.x = (int)(pt[i].x *cos(TWOPI *iAngle/360) + pt[i].y *sin(TWOPI *iAngle/360));

对ptTemp中的成员x赋值
(int)是强制取整 丢掉小数部分
pt[i].x *cos(TWOPI *iAngle/360)
是数组pt中的第i个元素中的成员x的数值乘上cos(TWOPI *iAngle/360)
pt[i].y *sin(TWOPI *iAngle/360)
意义类似
这里注意前面的(int)
下面一句话意义类似

TWOPI *iAngle/360
Angle显然是角度
TWOPI是2*pi
所以这串是把角度的Angle转换成弧度
我猜测这段程序的功能是把弧度制的东西转换成坐标形式